package com.xiaoshuidi.cloud.module.finance.api.finance.dto;

import com.xiaoshuidi.cloud.module.finance.enums.finance.DirectionEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class FinancePaymentDTO {
    /**
     * 交易主体 0租客1企业2业主
     */
    private Integer flowSubject;
    /**
     * 支付订单描述
     */
    private String subject;
    /**
     * 支付超期时间(分钟)
     */
    private int expireInMinute;
    /**
     * 线下交易单号/线上支付第三方交易号
     **/
    private String tradeNo;
    /**
     * 线下交易账号(转账等)
     **/
    private String tradeAccount;
    /**
     * 流入0,流出1
     * {@link DirectionEnum}
     **/
    @NotNull(message = "资金流向不能为空")
    @Max(value = 1, message = "资金流向参数值错误")
    @Min(value = 0, message = "资金流向参数值错误")
    private Integer direction;
    /**
     * 交易来源, 线上(ONLINE)/线下(OFFLINE)
     * {@link com.xiaoshuidi.cloud.module.finance.enums.finance.PaymentSourceEnum}
     **/
    private String sourceFrom;
    /**
     * 支付方式
     **/
    private String payMethod;
    /**
     * 交易金额(元)
     **/
    @NotNull(message = "交易金额不能为空")
    private java.math.BigDecimal tradeAmount;
    /**
     * 账单支付时的租金金额
     */
    private BigDecimal rental;

    private Long roomContractId;
    /**
     * 租赁合同号
     **/
    private String roomContractNo;
    /**
     * 合同账单编号
     **/
    private String roomRentOrderNo;
    /**
     * 合同账单开始
     **/
    private LocalDate roomRentOrderStart;
    /**
     * 合同账单结束
     **/
    private LocalDate roomRentOrderEnd;
//    /**
//     * 部门/门店id
//     **/
//    @NotNull(message = "门店id不能为空")
//    private Long storeId;
//    /**
//     * 门店名称
//     **/
//    @NotEmpty(message = "门店名称不能为空")
//    private String storeName;
    /**
     * 公寓id
     **/
    @NotNull(message = "公寓id不能为空")
    private Long apartmentId;
    /**
     * 公寓名称
     **/
    @NotEmpty(message = "公寓名称不能为空")
    private String apartmentName;
    /**
     * 房间id
     **/
    @NotNull(message = "房间id不能为空")
    private Long roomId;
    /**
     * 房间名称
     **/
    @NotEmpty(message = "房间名称不能为空")
    private String roomName;
    /**
     * 承租人
     * 承租可能是企业, 和实际住的人不是同一个
     **/
    @NotEmpty(message = "承租人不能为空")
    private String renter;
    /**
     * 租客姓名
     * 实际入住人
     **/
    @NotEmpty(message = "租客姓名不能为空")
    private String rentCustomer;
    /**
     * 交易对象姓名
     * 实际付款人
     **/
    @NotEmpty(message = "交易对象不能为空")
    private String trader;
    /**
     * 经办人姓名
     **/
    @NotEmpty(message = "经办人不能为空")
    private String operator;
    /**
     * 交易日期
     **/
    @NotNull(message = "交易日期不能为空")
    private LocalDateTime tradeTime;
    /**
     * 交易操作完成日期
     **/
    @NotNull(message = "交易操作完成日期不能为空")
    private LocalDateTime payTime;
    /**
     * 交易关联业务id
     */
    @NotEmpty(message = "sourceBizId不能为空")
    private String sourceBizId;
    /**
     * 交易关联业务类型
     * {@link com.xiaoshuidi.cloud.module.finance.enums.finance.SourceBizTypeEnum}
     */
    @NotEmpty(message = "sourceBizType不能为空")
    private String sourceBizType;
    /**
     * 备注
     **/
    private String remark;
    /**
     * 附件
     **/
    private String attachment;
    /**
     * 租户编号
     **/
    @NotNull(message = "tenantId不能为空")
    private Long tenantId;
    /**
     * 租客id
     */
    @NotNull(message = "租客id不能为空")
    private Long memberId;

    @NotNull(message = "deptId不能为空")
    private Long deptId;

    public BigDecimal getRental() {
        return rental == null ? BigDecimal.ZERO : rental;
    }
}
